package com.osdp.gateway.util;

import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
public class Result<T> implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -1099507191615032453L;
	
	/**
	 * 成功标志
	 */
	@Builder.Default
	private boolean success = true;

	/**
	 * 返回处理消息
	 */
	@Builder.Default
	private String message = "操作成功";//操作成功！

	/**
	 * 返回代码
	 */
	@Builder.Default
	private Integer code = 0;
	
	/**
	 * 返回数据对象 data
	 */
	private T result;

	/**
	 * 时间戳
	 */
//	@ApiModelProperty(value = "时间戳")
//	private long timestamp = System.currentTimeMillis();

	public Result() {
		this.code = CommonConstant.SC_OK_200;
		this.success = true;
	}

	public static <T> Result<T> success(){
		return success(CommonConstant.SC_OK_200,$default$message());
	}
	/**
	 * 响应成功
	 * @param message
	 * @param <T>
	 * @return
	 */
	public static <T> Result<T> success(String message) {
		return success(CommonConstant.SC_OK_200,message);
	}

	/**
	 * 响应成功
	 * @param code
	 * @param message
	 * @param <T>
	 * @return
	 */
	public static <T> Result<T> success(Integer code, String message) {
		return Result.<T>builder().success(true).code(code).message(message).build();
	}

	/**
	 * 成功后，返回数据
	 * @param data
	 * @return
	 */
	public static <T> Result<T> success(T data) {
		return Result.<T>builder().success(true).code(CommonConstant.SC_OK_200).message($default$message()).result(data).build();
	}

	public static <T> Result<T> fail(){
		return fail("操作失败！");
	}

	/**
	 * 响应失败
	 *
	 * @param msg 消息
	 * @param <T> 泛型
	 * @return result
	 */
	public static <T> Result<T> fail(String msg) {
		return fail(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
	}

	/**
	 * 响应失败
	 *
	 * @param code 状态码
	 * @param msg  消息
	 * @param <T>  泛型
	 * @return result
	 */
	public static <T> Result<T> fail(int code, String msg) {
		return Result.<T>builder().success(false).code(code).message(msg).build();
	}

	public String toJson() {
		return JSONObject.toJSONString(this);
	}

//	public static Result<Object> error(String msg) {
//		return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
//	}
//
//	public static Result<Object> error(int code, String msg) {
//		Result<Object> r = new Result<Object>();
//		r.setCode(code);
//		r.setMessage(msg);
//		r.setSuccess(false);
//		return r;
//	}

//	public static Result<Object> ok(){
//		return ok(CommonConstant.SC_OK_200,$default$message(),null);
//	}
	/**
	 * 响应成功
	 * @param result
	 * @return
	 */
//	public static Result<Object> ok(Object result) {
//		return ok(CommonConstant.SC_OK_200,$default$message(),result);
//	}

	/**
	 * 响应成功
	 * @param message
	 * @param result
	 * @return
	 */
//	public static Result<Object> ok(String message, Object result) {
//		return ok(CommonConstant.SC_OK_200,message,result);
//	}

	/**
	 * 响应成功
	 * @param code
	 * @param message
	 * @param result
	 * @return 结果集
	 */
//	public static Result<Object> ok(Integer code ,String message, Object result) {
//		Result<Object> r = new Result<Object>();
//		r.setSuccess(true);
//		r.setMessage(message);
//		r.setCode(code);
//		r.setResult(result);
//		return r;
//	}
}